/*****************************************************************************
* File Name: trackpad_ballasitic.h
*
* Version: 1.0
*
* Description:
* This file contains functions and macros for trackpad module 
*
* Note:
* Defining DISABLE_CUSTOM_POINTER_MOVEMENT in platform.h to disable trackpad module
*
* Owner: SKUV
*
* Related Document:
* CapSense Gesture data sheet
*
* Hardware Dependency:
* Trackpad PCB
*
* Code Tested With:
* 1. PSoC Creator 3.1 
* 2. ARM GCC 4.8.4
******************************************************************************
* Copyright (2015), Cypress Semiconductor Corporation.
******************************************************************************
* This software is owned by Cypress Semiconductor Corporation (Cypress) and is
* protected by and subject to worldwide patent protection (United States and
* foreign), United States copyright laws and international treaty provisions.
* Cypress hereby grants to licensee a personal, non-exclusive, non-transferable
* license to copy, use, modify, create derivative works of, and compile the
* Cypress Source Code and derivative works for the sole purpose of creating
* custom software in support of licensee product to be used only in conjunction
* with a Cypress integrated circuit as specified in the applicable agreement.
* Any reproduction, modification, translation, compilation, or representation of
* this software except as specified above is prohibited without the express
* written permission of Cypress.
*
* Disclaimer: CYPRESS MAKES NO WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, WITH
* REGARD TO THIS MATERIAL, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 
* Cypress reserves the right to make changes without further notice to the
* materials described herein. Cypress does not assume any liability arising out
* of the application or use of any product or circuit described herein. Cypress
* does not authorize its products for use as critical components in life-support
* systems where a malfunction or failure may reasonably be expected to result in
* significant injury to the user. The inclusion of Cypress' product in a life-
* support systems application implies that the manufacturer assumes all risk of
* such use and in doing so indemnifies Cypress against all charges. Use may be
* limited by and subject to the applicable Cypress software license agreement.
*****************************************************************************/
#ifndef _TRACKPAD_BALLASITIC_H_
#define _TRACKPAD_BALLASITIC_H_

#include "stdint.h"
#include "stdbool.h"
#include "stdarg.h"
#include "stdio.h"

typedef unsigned char   uint8;
typedef unsigned short  uint16;
typedef unsigned long   uint32;
typedef signed   char   int8;
typedef signed   short  int16;
typedef signed   long   int32;
typedef          float  float32;
    
typedef struct _Trackpad_Ballasitic_Filter_
{
    uint8  accelLevel;             /* Acceleration Level */
    uint8  speedLevel;             /* Speed Level */
    uint8  divisorValue;           /* Divisor Value */
    uint8  speedThresholdX;        /* Speed Threshold X */
    uint8  speedThresholdY;        /* Speed Threshold Y */
}Trackpad_Ballasitic_Filter;

#ifndef DISABLE_CUSTOM_POINTER_MOVEMENT

/*****************************************************************************
* Function Name: Trackpad_Ballasitic_Init()
******************************************************************************
* Summary:
* This function is initialises the ballistic parameters
*
* Parameters:
* Trackpad_Ballasitic_Filter filter - Filter values for providing the smooth movement 
*
* Return:
* None
*
* Note:
* Trackpad_Ballasitic_Init need to be called before calling Trackpad_Ballasitic_Pointer API
*****************************************************************************/
extern void Trackpad_Ballasitic_Init(Trackpad_Ballasitic_Filter filter);

/*****************************************************************************
* Function Name: Trackpad_Ballasitic_Reset()
******************************************************************************
* Summary:
* This function is resets the ballistics fraction values from the previous calculation
*
* Parameters:
* None
*
* Return:
* None
* 
* Note:
* None
*****************************************************************************/
extern void Trackpad_Ballasitic_Reset(void);

/*****************************************************************************
* Function Name: Trackpad_Ballasitic_Pointer()
******************************************************************************
* Summary:
* This function is calculates the ballistics acceleration for  more precisely pointer movement
* when moved slowly, and more nimbly when moved quickly.
*
* Parameters:
* None
*
* Return:
* None
*
* Note:
* None
*****************************************************************************/
extern void Trackpad_Ballasitic_Pointer(int8 *diffX,int8 *diffY);

#else
#define Trackpad_Ballasitic_Init(filter)
#define Trackpad_Ballasitic_Pointer(diffX,diffY)
#define Trackpad_Ballasitic_Reset()
#endif /* DISABLE_CUSTOM_POINTER_MOVEMENT */
#endif /* _TRACKPAD_BALLASITIC_H_ */
